home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
DEMON
/
RISCOS2
/
ARCKA9Q1.ARC
/
h
/
LAPB
< prev
next >
Wrap
Text File
|
1992-03-17
|
5KB
|
116 lines
/* Upper sub-layer (LAPB) definitions */
/* Control field templates */
#define I 0x00 /* Information frames */
#define S 0x01 /* Supervisory frames */
#define RR 0x01 /* Receiver ready */
#define RNR 0x05 /* Receiver not ready */
#define REJ 0x09 /* Reject */
#define U 0x03 /* Unnumbered frames */
#define SABM 0x2f /* Set Asynchronous Balanced Mode */
#define DISC 0x43 /* Disconnect */
#define DM 0x0f /* Disconnected mode */
#define UA 0x63 /* Unnumbered acknowledge */
#define FRMR 0x87 /* Frame reject */
#define UI 0x03 /* Unnumbered information */
#define PF 0x10 /* Poll/final bit */
#define MMASK 7 /* Mask for modulo-8 sequence numbers */
/* FRMR reason bits */
#define W 1 /* Invalid control field */
#define X 2 /* Unallowed I-field */
#define Y 4 /* Too-long I-field */
#define Z 8 /* Invalid sequence number */
/* Per-connection link control block
* These are created and destroyed dynamically,
* and are indexed through a hash table.
* One exists for each logical AX.25 Level 2 connection
*/
struct ax25_cb {
struct ax25_cb *next; /* Doubly linked list pointers */
struct ax25_cb *prev;
struct mbuf *txq; /* Transmit queue */
struct mbuf *rxasm; /* Receive reassembly buffer */
struct mbuf *rxq; /* Receive queue */
struct ax25 addr; /* Address header */
struct interface *interface; /* Associated interface */
char rejsent; /* REJ frame has been sent */
char remotebusy; /* Remote sent RNR */
char response; /* Response owed to other end */
char vs; /* Our send state variable */
char vr; /* Our receive state variable */
char unack; /* Number of unacked frames */
int maxframe; /* Transmit flow control level */
int16 paclen; /* Maximum outbound packet size */
int16 window; /* Local flow control limit */
char proto; /* Protocol version */
#define V1 1 /* AX.25 Version 1 */
#define V2 2 /* AX.25 Version 2 */
int16 pthresh; /* Poll threshold */
unsigned retries; /* Retry counter */
unsigned n2; /* Retry limit */
int state; /* Link state */
#define DISCONNECTED 0
#define SETUP 1
#define DISCPENDING 2
#define CONNECTED 3
#define RECOVERY 4
#define FRAMEREJECT 5
char frmrinfo[3]; /* I-field for FRMR message */
struct timer t1; /* Retry timer */
struct timer t2; /* Acknowledgement delay timer */
struct timer t3; /* Keep-alive poll timer */
struct timer t4; /* Link redundancy timer */
void (*r_upcall)(); /* Receiver upcall */
void (*t_upcall)(); /* Transmit upcall */
void (*s_upcall)(); /* State change upcall */
char *user; /* User pointer */
int segremain;
char segpid;
};
#define NULLAX25 ((struct ax25_cb *)0)
extern struct ax25_cb ax25default;
extern struct ax25_cb *ax25_cb[];
#define NHASH 17
#define YES 1
#define NO 0
int sendframe(struct ax25_cb *, char, char, struct mbuf *);
/* In LAPB */
int lapb_input(struct ax25_cb *, char, struct mbuf *);
void est_link(struct ax25_cb *);
void clr_ex(struct ax25_cb *);
void enq_resp(struct ax25_cb *);
void inv_rex(struct ax25_cb *);
int frmr(struct ax25_cb *, char, char);
int sendctl(struct ax25_cb *, char, char);
int lapb_output(struct ax25_cb *);
void lapbstate(struct ax25_cb *, int);
void ax_incom(struct ax25_cb *, int16);
void ax_session(struct ax25_cb *, int16);
void ax_rx(struct ax25_cb *, int16);
void ax_tx(struct ax25_cb *, int16);
void ax_state(struct ax25_cb *, int, int);
struct ax25_cb *open_ax25(struct ax25 *, int16, void (*)(),
void (*)(), void (*)(), struct interface *, char *);
/* In LAPBTIME */
void recover(int *);
void send_ack(int *);
void pollthem(int *);
void redundant(int *);
void tx_enq(struct ax25_cb *);
/* In LCSUM */
int16 lcsum(int16 *, int16);